package com.chenjt.jvm.first.two_classLoader;

/**
 * 注释：
 *
 * @author chenjt
 * @date 2025/6/4 10:26
 */
public class ClassLoaderTest {

    public static void main(String[] args) {
        // 获取系统类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        // jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b
        System.out.println(systemClassLoader);

        // 获取其上层：扩展类加载器
        ClassLoader exClassLoader = systemClassLoader.getParent();
        // jdk.internal.loader.ClassLoaders$PlatformClassLoader@4eec7777
        System.out.println(exClassLoader);

        // 获取其上层：获取不到引导类加载器（Bootstrap Class Loader是用C和C++编写的）
        ClassLoader bootstrapClassLoader = exClassLoader.getParent();
        System.out.println(bootstrapClassLoader);// null

        // 对于用户自定义类来说：默认使用系统类加载器进行加载
        // 获取当前类的加载是由哪个类加载器加载的
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        // jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b
        System.out.println(classLoader);

        /**
         * String类是使用引导类加载器进行加载的
         * 由此引申出Java的核心库都是使用引导类加载器进行加载的
         * （Bootstrap Class Loader是用C和C++编写的）
         */
        ClassLoader classLoader1 = String.class.getClassLoader();
        System.out.println(classLoader1);// null

    }

}
